/*
发布方实现:
  步骤：
      1，包含头文件：
      2，初始化ROS2客户端
      3，定义节点类；
        3-1，创建发布方；
        3-2，创建定时器；
        3-2，组织消息并发布；
      4，调用spin函数，并传入节点对象指针；
      5，释放资源
*/
// 1，包含头文件：
#include "rclcpp/rclcpp.hpp"
#include "base_interfaces_demo/msg/student.hpp"
using base_interfaces_demo::msg::Student;
using namespace std::chrono_literals;

// 3，定义节点类；
class MinimalPublisher:public rclcpp::Node
{
public:
    MinimalPublisher():Node("student_publisher_cpp"),count_(0){
        RCLCPP_INFO(this->get_logger(),"自定义消息接口的话题通信发布者实现");

        // 3-1，创建发布方；
        pulisher_ = this->create_publisher<Student>("topic_stu",10);
        // 3-2，创建定时器；
        timer_ = this->create_wall_timer(500ms,std::bind(&MinimalPublisher::timer_callback,this));
    }
private:
    void timer_callback()
    {
        // 3-2，组织消息并发布；
        auto stu = Student();
        stu.name = "大嘟嘟";
        stu.age = count_++;
        stu.height = 1.60;
        RCLCPP_INFO(this->get_logger(),"学生消息:name=%s,age=%d,height=%f",
        stu.name.c_str(),stu.age,stu.height);
        pulisher_->publish(stu);
    }
    rclcpp::Publisher<Student>::SharedPtr pulisher_;
    rclcpp::TimerBase::SharedPtr timer_;
    size_t count_;
};
int main(int argc, char const *argv[])
{
    // 2，初始化ROS2客户端
    rclcpp::init(argc,argv);
    // 4，调用spin函数，并传入节点对象指针；
    rclcpp::spin(std::make_shared<MinimalPublisher>());
    // 5，释放资源
    rclcpp::shutdown();
    return 0;
}




